package model.solicitud;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;

import dtos.SolicitudCotizadaDTO;

import model.condicionesVenta.CondicionVenta;

@Entity
@DiscriminatorValue("COTIZADA")
public class SolicitudCotizada extends Solicitud{

	@OneToMany (cascade=CascadeType.ALL)
    @JoinColumn(name="idSolicitud")
	private Set<ItemSolicitudCotizado> itemsCotizados;
	
	@ManyToMany
	@JoinTable(name="CondicionesVenta_Solicitudes", 
			joinColumns= {@JoinColumn(name="nroSolicitud")},
			inverseJoinColumns = { @JoinColumn(name = "idCondicion")})
	private Set<CondicionVenta> condiciones;
	
	public SolicitudCotizada (Solicitud solicitud)
	{
		super(solicitud.getNro(), solicitud.getCliente(), solicitud.getFecha());
		this.itemsCotizados = new HashSet<ItemSolicitudCotizado>();
		this.condiciones = new HashSet<CondicionVenta>();
	}

	public Set<ItemSolicitudCotizado> getItemsCotizados() {
		return this.itemsCotizados;
	}

	public void setItemsCotizados(Set<ItemSolicitudCotizado> items) {
		this.itemsCotizados = items;
	}

	public void addItemCotizado(ItemSolicitudCotizado item) {
		this.itemsCotizados.add(item);
	}
	
	public Set<CondicionVenta> getCondiciones() {
		return condiciones;
	}

	public void setCondiciones(Set<CondicionVenta> condiciones) {
		this.condiciones = condiciones;
	}
	
	public void addCondicion(CondicionVenta condicion) {
		this.condiciones.add(condicion);
	}
	
	public SolicitudCotizadaDTO getView()
	{
		SolicitudCotizadaDTO dto = new SolicitudCotizadaDTO(super.getView());
		
		for (ItemSolicitudCotizado item : this.itemsCotizados){
			dto.addItemCotizado(item.getView());
		}
		for (CondicionVenta condicion : this.condiciones){
			dto.addCondicionVenta(condicion.getView());
		}
		
		return dto;
	}
}
